from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from crmeb_project.testcases.crmeb_test import TestCaseCrmeb as TC # 一定记得起别名，不然会识别成两条测试用例


"""
httprunner：这是一个三方库
HttpRunner：类名，所有的测试用例类，必须继承HttpRunner
Config：全局配置文件，可以设置全局的url、忽略https警告、全局变量等
Step：每一条step就是一条接口
RunRequest：每一条测试用例的具体内容，包含：请求方式、请求地址、请求参数（headers、body）、断言内容
RunTestCase：用于解耦文件的调用。比如A文件写好后，B文件可以通过调用A文件来实现后续的用例步骤
"""

"""
httprunner命名规范：
py文件必须是_test结尾，或者是test_开头
定义的测试类，需要继承httprunner
teststeps为测试步骤，每一个测试步骤叫做step
step里的RunRequest，是待测的API名字，可按照接口名称填写
"""


class TestSearch(HttpRunner):  # 所有的测试类，必须继承HttpRunner
    """
    config:全局配置
    """
    config = Config("crmeb测试用例").verify(False).variables(**{"user": "admin", "pwd": "920509"}).base_url(
        "http://8.140.193.160:8899")
    """
    .variables(**{"user":"admin","pwd":"920509"}) ：定义了两个全局变量，整篇的文件都可以引用到
    .verify(False)  ：忽略https证书警告
    .base_url("http://8.140.193.160:8899")：设置全局的URL，后续都受用
    """
    teststeps = [
        Step(  # Step表示这是一条接口用例
            RunTestCase("登录用例解耦").call(TC).export("token","icon") # call：调用解耦的测试用例类，
            # export：用例reponse提出来的内容，需要写在这里面

        ),

        Step(
            RunRequest("用户分组查询").
                get("/adminapi/user/user_group/list").
                with_params(**{'page': '1', 'limit': '15'}).
                with_headers(**{'Authori-zation': 'Bearer $token'}).  # 引用上面取出来的参数
                validate().
                assert_equal("status_code", 200).
                assert_equal('headers."Content-Type"', "application/json; charset=utf-8").
                assert_equal("body.status", 200).
                assert_equal("body.msg", "ok")),

    ]


if __name__ == "__main__":
    TestSearch().test_start()
